1. Field of the Invention
The invention relates to operating systems utilized in computer systems, and more particularly, to the automatic development of a bootable image of an operating system for a particular computer.
2. Description of the Related Art
In their beginnings, computer systems were very complicated items which required constant attention and skilled operators and were very expensive. Because of this, each computer could effectively be considered a custom or unique entity. With the resources available, it was readily possible to customize and fine tune the bootable or run time image of the operating system of the computer for each individual computer. While this was often a complicated task, the number of generations of different versions was limited because of the relatively few variations of and modifications to the system. The cost of this development was in proportion with the cost of the computer system itself. However, this all abruptly changed with the development of the microprocessor and microprocessor-based computer systems. Costs plummeted, relatively, and systems became much more variable. One classic example of a microprocessor-based system utilized the S-100 bus system. In the 1970's and early 1980's numerous manufacturers were making various circuit boards which had varying functions, which all operated using the S-100 standard. Thus peripheral devices, such as terminals or video and keyboard systems, floppy and hard disk controllers, serial and parallel ports and other hardware interface items were quite variable. If operating systems were to incorporate all of the customized features as previously done in larger computer systems, the cost of developing the operating system, particularly the individual boot or loadable image, would have greatly exceeded the cost of the entire computer system itself.
To this end Digital Research Inc. developed an operating system referred to as CP/M. One of the features of CP/M was that it broke the operating system into two distinct portions: 1) the basic input/output system (BIOS) and (2) the remaining portions or the core of the operating system. The BIOS was intended to provide each developer a means for developing the particular interface code required for the hardware of that particular computer. The operating system itself then would be compatible across the number of different systems without change. A developer needed only to develop the particular code necessary to handle the particular hardware of that system, and then the CP/M operating system could be utilized. Changes did not have to be made to the core operating system for each particular system. CP/M and S-100 based systems, in their infancy, were very simple systems. However, even with these simple systems it was hard to get an isolated system operational. Since the software needed for the BIOS would have been provided by the board manufacturer, it generally had to be properly placed on the floppy disk and incorporated into the boot loading process. But if the code was necessary for booting the system, then this was a problem, unless another system was available. Therefore it was relatively hard to develop and configure an isolated system.
Additionally, as computer systems became complex the CP/M operating system became quite limited and many features were available which were not recognized by CP/M. A classical example was higher end graphical video interfaces, because CP/M was only text based. To solve this problem, developers began circumventing the operating system in many cases. Additionally, certain system level functions which were desirable had not been available in the systems and so were not addressed in the core operating system. Examples were timers, direct memory access (DMA) capabilities and high levels of interrupt functionality. Each vendor implemented the functions differently and so disks and programs became much less portable, because each developer patched CP/M as needed.
In response to the growing demand for more powerful computer systems, International Business Machines Corp. (IBM) developed and introduced the IBM PC. The IBM PC was developed around an Intel Corporation 8088 microprocessor. The PC/DOS or MS/DOS operating system from Microsoft Corp. was incorporated and utilized with the IBM PC. While MS/DOS had similarities with CP/M, one change was made so that the interrupt, timer and DMA functions were made an integral part of the operating system itself. The particular hardware relating to the interrupts, the timers and DMA was located on the system board of the computer itself and therefore it was considered not to be a changeable item, so that incorporation into the operating system core was acceptable. Various devices, such as the video system, the hard disk and floppy disk drive controllers and the various serial and parallel ports were considered to be changeable items as they were commonly located in interchangeable slots. Therefore, these items remained flexible and utilized what are commonly called device drivers. The device drivers could either be located in the system ROM provided by the manufacturer or could be located on floppy disk, which could then be incorporated into the runtime operating system. As part of the setup and initialization of an MS/DOS system, these various extended device drivers were referenced and included into the operating system as it was being loaded.
Time passed and computer systems again became more powerful. MS/DOS became limited and so extensions were rapidly developing to it, particularly in the video area and other areas where performance was limited. Because certain system level functions were incorporated into the core of MS/DOS, it was a relatively non-transportable system, that is, major portions would have been rewritten to transfer to a system having certain functions in other locations or differently defined. Further, MS/DOS had similar initial configuration problems as CP/M.
Another major operating system, UNIX, was being developed at the same time as CP/M and MS/DOS. UNIX was also a relatively non-transportable system which was hard to initially configure. In order to boot a UNIX-based system, it was required that a complete binary boot image of the run time operating system, including all of the necessary device drivers and system board interface software, be assembled into a single module which was then loaded. However, this was difficult to do on a single standalone system because all of the various drivers had to be gathered and then assembled, and became very difficult when the system was not operational. Conventionally, all the necessary device drivers were loaded onto another UNIX system and the generation process performed there, with the result being returned to the intended system. For various reasons UNIX became a standard operating system with the advantage that the application programs were freely transportable between various hardware platforms. However this transportability was not true of the core UNIX operating system because the core or kernel also included certain system board or system related hardware code. This varied between hardware platforms. Therefore the UNIX kernel had to be re-written and re-developed for each particular computer system by each particular manufacturer and was not readily transportable. This limited the widespread use of UNIX.
Therefore, while small computers had started out with the original goal of having a fully transportable operating system, they soon diverged from this goal as they became complex. Further, with this diversion it became significantly more difficult to develop a run time version of the operating system which sufficiently included all of the elements to allow complete operation with the nontransportable systems. Thus a transportable operating system across many diverse platforms that could be developed in relative isolation was not available.